package br.com.advocacia.dao.unitario.impl;

import java.util.List;

import org.hibernate.Query;
import org.springframework.stereotype.Repository;

import br.com.advocacia.dao.generico.DaoGenerico;
import br.com.advocacia.dao.unitario.contract.ProcessoDaoContract;
import br.com.advocacia.entidade.Processo;
import br.com.advocacia.util.DataUtil;

@Repository("processoDao")
public class ProcessoDao extends DaoGenerico<Processo> implements ProcessoDaoContract {

	private static final long serialVersionUID = 1L;

	@Override
	public Integer obterProximoProcesso() {
		
		try {
			Integer anoAtual = DataUtil.obterAnoAtual();
			
			StringBuilder sqlTotal = new StringBuilder();
			sqlTotal.append(" select max(sequenciaProcesso) from Processo ");
			sqlTotal.append(" where anoProcesso = " + anoAtual);
			
			Query query = getSession().createQuery(sqlTotal.toString());
			Integer ultimoNumero = (Integer) query.uniqueResult();
			
			if (ultimoNumero == null) {
				return 1;
			}
			return ultimoNumero + 1;
			
		} catch (Exception e) {
			System.out.println("Erro ao obter o número do processo");
		}
		return null;
	}
	
	@SuppressWarnings("unchecked")
	@Override
	public List<Processo> buscarTodosProcessos() {
		
		try {
			StringBuilder sqlTotal = new StringBuilder();
			sqlTotal.append("select e from Processo e where e.arquivoMorto is null order by e.sequenciaProcesso, e.anoProcesso ASC");
			
			Query query = getSession().createQuery(sqlTotal.toString());
			return query.list();
			
		} catch (Exception e) {
			System.out.println("Erro ao obter a lista de processos");
		}
		
		return null;
	}

}